package cn.e4j.modular.crm.service.impl;

import cn.e4j.core.dto.Dtos;
import cn.e4j.core.dto.impl.Dto;
import cn.e4j.core.shiro.ShiroKit;
import cn.e4j.core.shiro.ShiroUser;
import cn.e4j.core.util.AppCxt;
import cn.e4j.modular.crm.entity.MmrzT;
import cn.e4j.modular.crm.mapper.MmrzTMapper;
import cn.e4j.modular.crm.service.MmrzTService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 知识库维护作业表 服务实现类
 * </p>
 *
 * @author caijy
 * @since 2019-12-24
 */
@Service
public class MmrzTServiceImpl extends ServiceImpl<MmrzTMapper, MmrzT> implements MmrzTService {
    @Transactional(readOnly = true)
    public List<Dto> getListData(Dto dto) {
        return this.baseMapper.getListData(dto);
    }

    @Transactional(readOnly = true)
    public List<Dto> getListData(Page<Object> page, Dto dto) {
        return this.baseMapper.getListData(page, dto);
    }

    @Transactional
    public void addData(MmrzT mmrzT) {
        Dto dto = Dtos.newDto();
        dto.put("ENT", ShiroKit.getUser().getDBC());
        mmrzT.setMMRZSEQ(new BigDecimal(this.baseMapper.getCountNumber(dto) + 1));
        add(mmrzT);
    }

    @Transactional
    public void addDataBatch(List<MmrzT> mmrzTList) {
        Dto dto = Dtos.newDto();
        dto.put("ENT", ShiroKit.getUser().getDBC());
        int count = this.baseMapper.getCountNumber(dto);
        for(int i=0;i<mmrzTList.size();i++){
            mmrzTList.get(i).setMMRZSEQ(new BigDecimal(count + i + 1));
            add(mmrzTList.get(i));
        }
    }

    private void add(MmrzT mmrzT){
        mmrzT.setMMRZENT(ShiroKit.getUser().getDBC());
        mmrzT.setMMRZTYPE("1");
        mmrzT.insert();
    }

    @Transactional
    public void editData(MmrzT mmrzT) {
        UpdateWrapper<MmrzT> mmrzTUpdateWrapper = new UpdateWrapper<>();
        mmrzTUpdateWrapper.eq("MMRZENT", mmrzT.getMMRZENT());
        mmrzTUpdateWrapper.eq("MMRZTYPE", mmrzT.getMMRZTYPE());
        mmrzTUpdateWrapper.eq("MMRZSEQ", mmrzT.getMMRZSEQ());
        mmrzT.update(mmrzTUpdateWrapper);
    }

    @Transactional
    public void deleteData(MmrzT mmrzT) {
        delete(mmrzT);
    }

    @Transactional
    public void deleteDataBatch(List<MmrzT> mmrzTList) {
        for(MmrzT mmrzT: mmrzTList){
            delete(mmrzT);
        }
    }

    private void delete(MmrzT mmrzT){
        UpdateWrapper<MmrzT> mmrzTUpdateWrapper = new UpdateWrapper<>();
        mmrzTUpdateWrapper.eq("MMRZENT", mmrzT.getMMRZENT());
        mmrzTUpdateWrapper.eq("MMRZTYPE", mmrzT.getMMRZTYPE());
        mmrzTUpdateWrapper.eq("MMRZSEQ", mmrzT.getMMRZSEQ());
        mmrzT.delete(mmrzTUpdateWrapper);
    }

    @Transactional(readOnly = true)
    public List<MmrzT> exportListData(Dto dto) {
        return this.baseMapper.exportListData(dto);
    }

}
